#include <stdio.h>

int main(int argc, const char *argv[])
{
	// 定义了一个一维数组 数组名叫 s 数组中共有5个元素
	// 每个元素都是一个int类型的变量
	int s[5];

	// 一维数组的大小
	printf("sizeof(s) = %ld\n", sizeof(s)); // 20  === 5 * sizeof(int)

	// 访问数组元素的方式
	// 数组名[下标]   注意 下标从0开始 
	// 也就是说 长度为5的数组 下标范围是 [0,4]
	// 当取出数组中的一个元素后 对其的操作和操作单个变量是一模一样的
	s[0] = 10; // 写操作
	s[1] = 20;
	printf("s[0] = %d\n", s[0]); // 读操作
	printf("s[1] = %d\n", s[1]);

	// 数组元素在内存上是连续的
	// 使用 %p 可以打印变量在内存上的地址编号 
	// 使用 & 可以获取变量的地址 对于多字节的变量而言 
	// 		& 取到的是编号最小的那个 我们称为首地址
	printf("&s[0] = %p\n", &s[0]); // 依次相差4字节 一个int的大小
	printf("&s[1] = %p\n", &s[1]);
	printf("&s[2] = %p\n", &s[2]);
	printf("&s[3] = %p\n", &s[3]);
	printf("&s[4] = %p\n", &s[4]);

	// 访问数组中每个元素 ----一维数组的遍历
	int i = 0;
	//for(i = 0; i < 5; i++){
	for(i = 0; i < sizeof(s)/sizeof(s[0]); i++){
		printf("%d  ", s[i]);
	}
	printf("\n");

	// 数组名是一个地址常量 不能被赋值!!!
	int s2[5];
	//s2 = s; // 错误的
	//s2++; // 错误的 
	// 如果想把某一个数组的元素都赋值给另一个数组
	// 只能循环一个元素一个元素的赋值
	for(i = 0; i < sizeof(s)/sizeof(s[0]); i++){
		s2[i] = s[i];
	}

	return 0;
}
